package com.doctor.windflower_doctor.http.callback;

import org.springframework.http.ResponseEntity;

import com.doctor.windflower_doctor.http.parser.Parser;


/**
 *  <p>
 *  功能
 *  </p>
 *  
 *  <p>Copyright  北京亚普拓信息咨询服务有限公司 2014 All right reserved.</p>
 *  @author 皮勉 时间 2014年10月8日 下午4:45:23
 *  @version 1.0 
 *  </br>
 *  最后修改人    无
 * 
 */
public abstract class HttpSpringCallBack<T> {

	private Parser parser;
	private Class<T> targetType;
	public HttpSpringCallBack(Parser parser,Class<T> targetType) {
		this.parser = parser;
		this.targetType=targetType;
	}

	public void onFailure(Exception e, String msg) {
		handleError(e, msg);
	}

	public void onSuccess(ResponseEntity<String> info) {
		try {
			if (info != null) {
				T result = null;
				if (parser != null) {
					result = parser.parserResult(info.getBody(),targetType);
				}
//			ResponseEntity<T> resInfo = (ResponseEntity<T>) info;//new ResponseEntity(info.getBody(), info.getHeaders(), info.getStatusCode());
				handleResult(info, result);
			}
		} catch (Exception e) {
			
			handleError(e, "操作失败，请重试");
			e.printStackTrace();
			
		}
	}

	/**
	 *  <p>
	 *  功能  处理结果
	 *  </p>
	 * @author 皮勉 时间 2014年10月8日 下午4:48:19
	 * @param responseInfo
	 * @param result
	 */
	protected abstract void handleResult(ResponseEntity<String> responseInfo, T result);

	/**
	 *  <p>
	 *  功能  处理错误
	 *  </p>
	 * @author 皮勉 时间 2014年10月8日 下午4:48:37
	* @param e 异常类
	 * @param msg 异常信息
	 */
	protected abstract void handleError(Exception e, String msg);


}

